//package com.example.springai.http.pojo.v1;
//
//import com.fasterxml.jackson.databind.JsonNode;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.springframework.context.ApplicationContext;
//import org.springframework.context.annotation.AnnotationConfigApplicationContext;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Description;
//import org.springframework.core.ResolvableType;
//
//import java.lang.reflect.ParameterizedType;
//import java.lang.reflect.Type;
//import java.util.Map;
//import java.util.function.Function;
//
//public class FunctionInvoker {
//
//    public static void main(String[] args) throws Exception {
//        // 模拟返回的 JSON 数据
//        String jsonResponse = """
//                {
//                    "id": "5b4ee00d-0415-475a-8bf0-3aec8952a27b",
//                    "object": "chat.completion",
//                    "created": 1736319573,
//                    "model": "deepseek-chat",
//                    "choices": [
//                        {
//                            "index": 0,
//                            "message": {
//                                "role": "assistant",
//                                "content": "",
//                                "tool_calls": [
//                                    {
//                                        "index": 0,
//                                        "id": "call_0_31132311-93ce-4917-958d-3b62f49db17f",
//                                        "type": "function",
//                                        "function": {
//                                            "name": "queryMajorCount",
//                                            "arguments": "{\\"location\\":\\"Boston\\",\\"unit\\":\\"fahrenheit\\"}"
//                                        }
//                                    }
//                                ]
//                            },
//                            "logprobs": null,
//                            "finish_reason": "tool_calls"
//                        }
//                    ],
//                    "usage": {
//                        "prompt_tokens": 164,
//                        "completion_tokens": 27,
//                        "total_tokens": 191,
//                        "prompt_cache_hit_tokens": 128,
//                        "prompt_cache_miss_tokens": 36
//                    },
//                    "system_fingerprint": "fp_3a5770e1b4"
//                }
//                """;
//
//        // 1. 解析 JSON 数据
//        ObjectMapper objectMapper = new ObjectMapper();
//        JsonNode rootNode = objectMapper.readTree(jsonResponse);
//        JsonNode choicesNode = rootNode.get("choices");
//        JsonNode firstChoice = choicesNode.get(0);
//        JsonNode message = firstChoice.get("message");
//        JsonNode toolCalls = message.get("tool_calls");
//
//
//
//        if (choicesNode == null || !choicesNode.isArray() || choicesNode.isEmpty()) {
//            throw new IllegalArgumentException("Invalid or empty 'choices' field");
//        }
//        JsonNode jsonfunction = toolCalls.get(0);
//        JsonNode functionNode = jsonfunction.get("function");
//
//        String functionName = functionNode.get("name").asText();
//        String argumentsJson = functionNode.get("arguments").asText();
//
//        // 2. 初始化 Spring 上下文（模拟）
//        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
//
//        // 3. 查找 Bean 方法
//        Object bean = context.getBean(functionName); // 方法名为 Bean 的名字
//
//        // 4. 获取方法对象并调用
//        if (bean instanceof Function) {
////            Function<Object, Object> function = (Function<Object, Object>) bean;
//            Function<Object, Object> function = (Function<Object, Object>) bean;
//
//            // 解析参数
//            Map<String, Object> arguments = objectMapper.readValue(argumentsJson, Map.class);
//
////            Type[] genericTypes = getFunctionGenericTypes(function.getClass());
////            if (genericTypes == null || genericTypes.length != 2) {
////                throw new IllegalStateException("Unable to determine generic types for Function.");
////            }
//            ResolvableType resolvableType = ResolvableType.forInstance(bean);
//
//            Class<?> inputType = resolvableType.as(Function.class).getGeneric(0).resolve();
//            Class<?> outputType = resolvableType.as(Function.class).getGeneric(1).resolve();
//
//            if (inputType != null) {
//                System.out.println("Input Type: " + inputType.getName());
//            }
//            if (outputType != null) {
//                System.out.println("Output Type: " + outputType.getName());
//            }
//
//            // 使用反射实例化输入对象
////            Object input = createInstance(inputType, arguments.get("location"));
//            Object inputInstance = createInstance(inputType, arguments.get("location"));
//            System.out.println("Created Input: " + inputInstance);
//
//            // 调用 Function 并获取输出
//            Object output = function.apply(inputInstance);
//            System.out.println("Output: " + output);
//            // 构造请求对象
////            QueryMajorCountRequest request = new QueryMajorCountRequest((String) arguments.get("schoolName"));
//
//            // 调用 Function
////            QueryMajorCountResponse response = (QueryMajorCountResponse) function.apply(request);
//
//            // 打印结果
////            System.out.println("Major count: " + response.count());
//        } else {
//            throw new IllegalArgumentException("Bean is not a Function");
//        }
//    }
//    private static Type[] getFunctionGenericTypes(Class<?> functionClass) {
//        Type[] interfaces = functionClass.getGenericInterfaces();
//        for (Type type : interfaces) {
//            if (type instanceof ParameterizedType parameterizedType) {
//                if (Function.class.equals(parameterizedType.getRawType())) {
//                    return parameterizedType.getActualTypeArguments();
//                }
//            }
//        }
//        return null;
//    }
//    // 模拟配置类
//    public static class MyConfig {
//        @Bean
//        @Description("根据学校名称查询专业数量")
//        public Function<QueryMajorCountRequest, QueryMajorCountResponse> queryMajorCount() {
//            return request -> {
//                try {
//                    int count = getMajorCount(request.schoolName());
//                    return new QueryMajorCountResponse(count);
//                } catch (Exception e) {
//                    System.err.println("Failed to query major count for school " + request.schoolName());
//                    return new QueryMajorCountResponse(-1);
//                }
//            };
//        }
//
//        private int getMajorCount(String schoolName) {
//            System.out.println("schoolName = " + schoolName);
//            // 模拟服务逻辑
//            if ("Major".equals(schoolName)) {
//                return 1100;
//            } else {
//                return 0;
//            }
//        }
//    }
//
//    private static Object createInstance(Class<?> recordClass, Object... args) throws Exception {
//        if (recordClass.isRecord()) {
//            var components = recordClass.getRecordComponents();
//            Class<?>[] parameterTypes = new Class<?>[components.length];
//            for (int i = 0; i < components.length; i++) {
//                parameterTypes[i] = components[i].getType();
//            }
//            var constructor = recordClass.getDeclaredConstructor(parameterTypes);
//            return constructor.newInstance(args);
//        }
//        throw new IllegalArgumentException("Provided class is not a record: " + recordClass.getName());
//    }
//
//    // 请求对象
//    public record QueryMajorCountRequest(String schoolName) {}
//
//    // 响应对象
//    public record QueryMajorCountResponse(int count) {}
//}
